package com.service;

import com.dao.UserDao;
import com.entity.User;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.DigestUtils;
import org.springframework.util.ObjectUtils;

import java.nio.charset.StandardCharsets;
import java.util.List;


@Service
@Transactional
public class UserServiceImpl implements UserService{
    private UserDao userDao;

    @Autowired
    private MailService mailService;

    @Autowired
    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public User login(String username, String pwd) {

       //用户名查询用户
     User user =  userDao.findByUserName(username);
     if(ObjectUtils.isEmpty(user))throw new RuntimeException("用户名不正确");
     //对比密码
   String pwdSecret = DigestUtils.md5DigestAsHex(pwd.getBytes(StandardCharsets.UTF_8));
   if(!user.getPwd().equals(pwdSecret))throw new RuntimeException("密码输入错误");
   return user;
    }

    @Override
    public List<User> lists() {
        return userDao.lists();
    }

/*    @Override
    public List<User> findAll() {
        return userDao.findAll();
    }

    @Override
    public List<User> findAllByPage(int pageNum, int pageSize) {
       PageHelper.startPage(pageNum,pageSize);
        return userDao.findAllByPage();
    }*/

    @Override
    public List<User> findByPage(Integer pageNow, Integer pageSize) {
        //处理分页逻辑，主要是limit(?,?)第一个参数该如何处理，
        // 下面start主要逻辑是例如传入3,2    那么相当于第三页显示2条，其start的定位就是以2条为一页，其start按理说应该是3*2为6,其start应该是6，
        // 但是limit的是从0开始而不是从1开始，所以要减1，所以是(4,2)，，而4是实际是第五条开始,
        int start = (pageNow - 1) * pageSize;
        return userDao.findByPage(start,pageSize);
    }

    @Override
    public String findTotals() {

        return userDao.findTotals();
    }

    @Override
    public void update(User user) {
        userDao.update(user);
    }

    @Override
    public User findById(Integer id) {
        return userDao.findById(id);
    }

    @Override
    public void save(User user) {
        userDao.save(user);
    }

    @Override
    public void delete(Integer id) {
        userDao.delete(id);
    }

    @Override
    public void register(User user) {
        //根据用户名查询在数据库中是否唯一
      User userDB = userDao.findByUserName(user.getUsername());
      //判断用户是否存在
        if (!ObjectUtils.isEmpty(userDB))throw new RuntimeException("已被注册");
        //加密
        String newPwd = DigestUtils.md5DigestAsHex(user.getPwd().getBytes(StandardCharsets.UTF_8));
        user.setPwd(newPwd);
          //注册用户
     userDao.save(user);
     String subject="欢迎加入xxxx公司";
     String text= "欢迎新员工入职";
     mailService.sendSimpleEmail(user.getEmail(),subject,text);

        System.out.println("给hr员工发送邮件成功");
    }


}
